package algo3.algocity.mensajeros;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import algo3.algocity.controlador.Controlador;
import algo3.algocity.modelo.conectores.LineaDeTension;
import algo3.algocity.modelo.conectores.TuberiaDeAgua;
import algo3.algocity.modelo.excepciones.NoSePuedeEdificarEnEsaZonaException;
import algo3.algocity.modelo.mapa.Coordenada;
import algo3.algocity.modelo.mapa.Hectarea;
import algo3.algocity.modelo.mapa.Mapa;
import algo3.algocity.vista.EstadoVistaMapa;

public class ClickSobreElMapaListener implements MouseListener {

	private Controlador controlador;
	private Mapa mapa;
	
	public ClickSobreElMapaListener(Controlador controlador,Mapa mapa){
		
		this.controlador = controlador;
		this.mapa = mapa;
	}
	
	@Override
	public void mouseClicked(MouseEvent args) {
		
		Coordenada posicionDeClick = obtenerCoordenadaDondeSeClickeo(args);
		//este es el botton derecho del mouse
		
		if(args.getButton() == MouseEvent.BUTTON3) {
		
			//controlador.obtenerVista().mostrarInfo(posicionDeClick);
			//aca le decimos a la construccion q muestre su info 
			
			Hectarea hectarea = mapa.obtenerUnSectorDelMapa(posicionDeClick.obtenerPosicionX(), posicionDeClick.obtenerPosicionY());
			System.out.println( hectarea.obtenerMegaConstruccion());  
			
		}
		
		if(controlador.obtenerSiguienteMegaConstruccionAConstruir() != null) {
			
			try {
					controlador.obtenerJugador().obtenerPartida().construir(controlador.obtenerSiguienteMegaConstruccionAConstruir(), posicionDeClick);
					notificarUsuario("Construccion exitosa.");
			} catch (NoSePuedeEdificarEnEsaZonaException e) {
					
					e.printStackTrace();
				}
						
			controlador.definirSiguienteMegaConstruccionAConstruir(null);
					}
		
		if(controlador.obtenerSiguienteMiniConstruccionAConstruir() != null) {
		
			if(controlador.obtenerSiguienteMiniConstruccionAConstruir() instanceof LineaDeTension)
				try {
					controlador.obtenerJugador().obtenerPartida().construirLineaDeTension((LineaDeTension) controlador.obtenerSiguienteMiniConstruccionAConstruir(), posicionDeClick);
				} catch (NoSePuedeEdificarEnEsaZonaException e) {
				notificarUsuario("Construccion exitosa.");
				e.printStackTrace();
			}
	
			
			
			if(controlador.obtenerSiguienteMiniConstruccionAConstruir() instanceof TuberiaDeAgua){
				
				
				
				try {
					controlador.obtenerJugador().obtenerPartida().construirTuberiaDeAgua((TuberiaDeAgua) controlador.obtenerSiguienteMiniConstruccionAConstruir(), posicionDeClick);
					controlador.obtenerVista().cambiarAVistaSubterranea();
				} catch (NoSePuedeEdificarEnEsaZonaException e) {
				notificarUsuario("Construccion exitosa.");
				e.printStackTrace();
				}
			}
		controlador.definirSiguienteMiniConstruccionAConstruir(null);	
		}
	
		controlador.obtenerVista().getCantidadDeDinero().setText("$" + controlador.obtenerJugador().dinero());
		}
	
	
	private void notificarUsuario(String mensaje) {
		controlador.notificarUsuario(mensaje);
	}

	@Override
	public void mousePressed(MouseEvent e) {
	
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		
	}

	private Coordenada obtenerCoordenadaDondeSeClickeo(MouseEvent event) {
		return new Coordenada(event.getY() / EstadoVistaMapa.ANCHO_DE_COLUMNA,
				event.getX() / EstadoVistaMapa.ANCHO_DE_FILA);
	}
}
